/**
  ****************************(C) COPYRIGHT 2025 CZJ****************************
  * @file       sbus_set.c/h
  * @brief      遥控器SBUS数据解析与设置函数。
  * @history
  *  Version    Date            Author          Modification
  *  V1.0.0     2025/09/02      CZJ		          1. 完成基本DBUS解析与初始化函数。
  *
  @verbatim
  ==============================================================================

  ==============================================================================
  @endverbatim
  ****************************(C) COPYRIGHT 2025 CZJ****************************
**/

#ifndef _SBUS_SET_H
#define _SBUS_SET_H

#include "stm32f4xx_hal.h"
#include "bsp_rc.h"

#define LD_SBUS_RX_BUF_NUM 50u

#define LD_RC_FRAME_LENGTH 25u

#define SBUS_RC_CH_VALUE_MIN         ((uint16_t)364)
#define SBUS_RC_CH_VALUE_OFFSET      ((uint16_t)1024)
#define SBUS_RC_CH_VALUE_MAX         ((uint16_t)1684)

/* ----------------------- SBUS_RC Switch Definition----------------------------- */
#define SBUSRC_SW_UP                ((uint16_t)1)
#define SBUSRC_SW_MID               ((uint16_t)3)
#define SBUSRC_SW_DOWN              ((uint16_t)2)
#define sbus_switch_is_down(s)      (s == SBUSRC_SW_DOWN)
#define sbus_switch_is_mid(s)       (s == SBUSRC_SW_MID)
#define sbus_switch_is_up(s)        (s == SBUSRC_SW_UP)

#define sbus_s_1 240   //最上边
#define sbus_s_2 1807  //最下边
#define sbus_s_3 1024  //中间
#define sbus_knob_zero 240

typedef struct 
{
	int16_t ch[16]; // 最多16个通道，多少通道开多少个数组
	char s[4];			//上边拨杆
	int16_t knob[2];//旋钮
}SBUS_RC_Ctrl_t;

extern unsigned char sbus_rx_buf[25];		//接收的数据
extern SBUS_RC_Ctrl_t sbus_ctrl;									//转换的数据

void SBUS_RC_init(void);
void sbus_to_rc(uint8_t *sbus_rx_buf,SBUS_RC_Ctrl_t *sbus);
void USER_SBUS_RxHandler(UART_HandleTypeDef *huart,uint16_t Size);
const SBUS_RC_Ctrl_t *get_sbus_point(void);

#endif

